/**
  ******************************************************************************
  * @file    time.c
  * @author  MCU Application Team
  * @Version V1.0.0
  * @Date    2022-8-19
  * @brief   time function
  ******************************************************************************
  */
/* Includes ------------------------------------------------------------------*/
#include "time.h"
#include "main.h"

/* Private define ------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
static uint16_t tim_count = 0;       //定时器计数周
/* Private function prototypes -----------------------------------------------*/
/*******************************************************************************
**功能描述 ：配置TIM外部时钟输入
**输入参数 ：
**输出参数 ：
*******************************************************************************/
void APP_ConfigTIM1ExternalClock(void)
{
  /*配置PA12引脚为TIM1_ETR输入*/
  LL_GPIO_InitTypeDef ETRGPIOinit={0};
  
  LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
  
  ETRGPIOinit.Pin        = LL_GPIO_PIN_12;
  ETRGPIOinit.Mode       = LL_GPIO_MODE_ALTERNATE;
  ETRGPIOinit.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
  ETRGPIOinit.Pull       = LL_GPIO_PULL_UP;
  ETRGPIOinit.Alternate  = LL_GPIO_AF_2;
  
  LL_GPIO_Init(GPIOA,&ETRGPIOinit);
  
  /*配置TIM1外部时钟源模式1*/
  LL_TIM_SetClockSource(TIM1,LL_TIM_CLOCKSOURCE_EXT_MODE1);
  
  /*配置触发选择为ETRF*/
  LL_TIM_SetTriggerInput(TIM1,LL_TIM_TS_ETRF);
  
  /*配置ETR*/
  LL_TIM_ConfigETR(TIM1,LL_TIM_ETR_POLARITY_NONINVERTED,
                        LL_TIM_ETR_PRESCALER_DIV1,
                        LL_TIM_ETR_FILTER_FDIV1);
 
}

/*******************************************************************************
**功能描述 ：配置TIM计数模式
**输入参数 ：
**输出参数 ：
*******************************************************************************/
void APP_ConfigTIM1Count(void)
{
  /*配置TIM1*/
  LL_TIM_InitTypeDef TIM1CountInit = {0};
  
  /***********************************************
  ** 输入时钟：    8000000 
  ** 计数模式：    向上计数
  ** 时钟预分频：  8000 
  ** 自动重装载值：500 
  ** 重复计数值：  0
  ************************************************/
  TIM1CountInit.ClockDivision       = LL_TIM_CLOCKDIVISION_DIV1;
  TIM1CountInit.CounterMode         = LL_TIM_COUNTERMODE_UP;
  TIM1CountInit.Prescaler           = 8000-1;
  TIM1CountInit.Autoreload          = 10-1;
  TIM1CountInit.RepetitionCounter   = 0;
  
  /*初始化TIM1*/
  LL_TIM_Init(TIM1,&TIM1CountInit);
  
  /*使能UPDATE中断*/
  LL_TIM_EnableIT_UPDATE(TIM1);
  
  /*使能TIM1计数器*/
  LL_TIM_EnableCounter(TIM1);
  
  /*开启UPDATE中断请求*/
  NVIC_EnableIRQ(TIM1_BRK_UP_TRG_COM_IRQn);
  NVIC_SetPriority(TIM1_BRK_UP_TRG_COM_IRQn,0);
}

/*******************************************************************************
**功能描述 ：TIM更新中断回调函数
**输入参数 ：
**输出参数 ：
*******************************************************************************/
void APP_UpdateCallback(void)
{
    //单位 10ms 进来一次
    tim_count ++;
    if(tim_count>=0xFFFF)  tim_count = 0;  
    
    if( 0 == tim_count%100 ){
         /*翻转LED*/
        BSP_LED_Toggle(RUN_LED);
    }
    Beep_time_event();
    TM1650_Time_Task();
}


/************************ (C) COPYRIGHT Xinling *****END OF FILE****/
